package com.sky.context;

/**
 * 该类用于在当前线程范围内存储和管理用户的ID信息。
 * 借助ThreadLocal，能够确保每个线程都有独立的用户ID副本，防止多线程环境下的数据冲突。
 * 它提供了设置、获取和移除当前线程用户ID的方法。
 */
public class BaseContext {

    /**
     * 静态的ThreadLocal变量，用于存储当前线程的用户ID。
     * ThreadLocal为每个使用它的线程都维护了一个独立的变量副本，
     * 这意味着每个线程都能独立地改变自己的副本，而不会影响其他线程所对应的副本。
     */
    public static ThreadLocal<Long> threadLocal = new ThreadLocal<>();

    /**
     * 此方法用于设置当前线程的用户ID。
     * 将传入的用户ID存储到当前线程的ThreadLocal中，
     * 这样在当前线程的后续操作里就能够获取到该用户ID。
     *
     * @param id 要设置的用户ID
     */
    public static void setCurrentId(Long id) {
        threadLocal.set(id);
    }

    /**
     * 此方法用于获取当前线程的用户ID。
     * 从当前线程的ThreadLocal中取出之前存储的用户ID，
     * 若未设置过，则返回null。
     *
     * @return 当前线程的用户ID，如果未设置则返回null
     */
    public static Long getCurrentId() {
        return threadLocal.get();
    }

    /**
     * 此方法用于移除当前线程的用户ID。
     * 当当前线程的操作结束后，调用此方法清除存储在ThreadLocal中的用户ID，
     * 以此避免内存泄漏和数据混乱。
     */
    public static void removeCurrentId() {
        threadLocal.remove();
    }

}